. "$dir/logging.sh"
. "$dir/locking.sh"
-VTPMDB="/etc/xen/vtpm.db"
+VTPMDB="/var/vtpm/vtpm.db"
#In the vtpm-impl file some commands should be defined:
# vtpm_create, vtpm_setup, vtpm_start, etc. (see below)
# If no entry in the TPM database is found, the instance is
# created and an entry added to the database.
function vtpm_create_instance () {
- local res instance domname reason
- domname=$(xenstore_read "$XENBUS_PATH"/domain)
+ local res instance domname reason uuid
+ uuid=$(xenstore_read "$XENBUS_PATH"/uuid)
reason=$(vtpm_get_create_reason)
claim_lock vtpmdb
- instance=$(vtpmdb_find_instance $domname)
+
+ instance="0"
+
+ if [ "$uuid" != "" ]; then
+ instance=$(vtpmdb_find_instance $uuid)
+ fi
+ if [ "$instance" == "0" ]; then
+ domname=$(xenstore_read "$XENBUS_PATH"/domain)
+ instance=$(vtpmdb_find_instance $domname)
+ fi
if [ "$instance" == "0" -a "$reason" != "create" ]; then
release_lock vtpmdb
vtpm_create $instance
if [ $vtpm_fatal_error -eq 0 ]; then
- vtpmdb_add_instance $domname $instance
+ if [ "$uuid" != "" ]; then
+ vtpmdb_add_instance $uuid $instance
+ else
+ vtpmdb_add_instance $domname $instance
+ fi
fi
else
if [ "$reason" == "resume" ]; then
#Since it is assumed that the VM will appear again, the
#entry is kept in the VTPMDB file.
function vtpm_remove_instance () {
- local instance reason domname
+ local instance reason domname uuid
#Stop script execution quietly if path does not exist (anymore)
xenstore-exists "$XENBUS_PATH"/domain
- domname=$(xenstore_read "$XENBUS_PATH"/domain)
+ uuid=$(xenstore_read "$XENBUS_PATH"/uuid)
- if [ "$domname" != "" ]; then
- claim_lock vtpmdb
+ claim_lock vtpmdb
- instance=$(vtpmdb_find_instance $domname)
+ instance="0"
- if [ "$instance" != "0" ]; then
- vtpm_suspend $instance
- fi
+ if [ "$uuid != "" ]; then
+ instance=$(vtpmdb_find_instance $uuid)
+ fi
- release_lock vtpmdb
+ if [ "$instance == "0" ]; then
+ domname=$(xenstore_read "$XENBUS_PATH"/domain)
+ instance=$(vtpmdb_find_instance $domname)
fi
+
+ if [ "$instance" != "0" ]; then
+ vtpm_suspend $instance
+ fi
+
+ release_lock vtpmdb
}
@param domain: domain this controller is handling devices for.
@type domain: XendDomainInfo
"""
- tpmif.destroy_vtpmstate(domain.getName())
+ from xen.xend.XendLogging import log
+ tpmif.destroy_vtpmstate(domain.info.get('vtpm_refs'))
destroy_device_state = classmethod(destroy_device_state)
xoptions = XendOptions.instance()
-def destroy_vtpmstate(name):
+def destroy_vtpmstate(uuids):
if os.path.exists(VTPM_DELETE_SCRIPT):
- os.system(VTPM_DELETE_SCRIPT + " " + name)
+ for uuid in uuids:
+ os.system(VTPM_DELETE_SCRIPT + " " + uuid)
class TPMifController(DevController):
"""TPM interface controller. Handles all TPM devices for a domain.
from vtpm_utils import *
import commands
import os
+import atexit
config = {"vtpm":"instance=1,backend=0"}
domain = XmTestDomain(extraConfig=config)
vtpm_cleanup(domain.getName())
FAIL("Unable to create domain")
+
domName = domain.getName()
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
status, output = traceCommand("xm vtpm-list %s" % domain.getId())
eyecatcher = "/local/domain/0/backend/vtpm"
where = output.find(eyecatcher)
if status != 0:
- vtpm_cleanup(domName)
FAIL("xm vtpm-list returned bad status, expected 0, status is %i" % status)
elif where < 0:
- vtpm_cleanup(domName)
FAIL("Fail to list virtual TPM device")
domain.stop()
-
-vtpm_cleanup(domName)
import commands
import os
import os.path
+import atexit
config = {"vtpm":"instance=1,backend=0"}
domain = XmTestDomain(extraConfig=config)
except DomainError, e:
if verbose:
print e.extra
- vtpm_cleanup(domName)
FAIL("Unable to create domain (%s)" % domName)
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
try:
console.sendInput("input")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL(str(e))
try:
run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("No result from dumping the PCRs")
if re.search("No such file",run["output"]):
- vtpm_cleanup(domName)
FAIL("TPM frontend support not compiled into (domU?) kernel")
domain.closeConsole()
domain.stop()
-vtpm_cleanup(domName)
-
if not re.search("PCR-00:",run["output"]):
FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side")
import commands
import os
import os.path
+import atexit
config = {"vtpm":"instance=1,backend=0"}
domain = XmTestDomain(extraConfig=config)
except DomainError, e:
if verbose:
print e.extra
- vtpm_cleanup(domName)
FAIL("Unable to create domain (%s)" % domName)
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
try:
console.sendInput("input")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL(str(e))
try:
run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("No result from dumping the PCRs")
if re.search("No such file",run["output"]):
- vtpm_cleanup(domName)
FAIL("TPM frontend support not compiled into (domU?) kernel")
consoleHistory = console.getHistory()
except TimeoutError, e:
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL(str(e))
if status != 0:
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL("xm save did not succeed")
try:
except TimeoutError, e:
os.remove("%s.save" % domName)
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL(str(e))
os.remove("%s.save" % domName)
if status != 0:
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL("xm restore did not succeed")
try:
console = domain.getConsole()
except ConsoleError, e:
- vtpm_cleanup(domName)
FAIL(str(e))
try:
run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL(str(e))
if not re.search("PCR-00:",run["output"]):
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side")
loop += 1
domain.stop()
-vtpm_cleanup(domName)
-
import commands
import os
import os.path
+import atexit
config = {"vtpm":"instance=1,backend=0"}
domain = XmTestDomain(extraConfig=config)
except DomainError, e:
if verbose:
print e.extra
- vtpm_cleanup(domName)
FAIL("Unable to create domain (%s)" % domName)
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
try:
console.sendInput("input")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL(str(e))
try:
run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("No result from dumping the PCRs")
if re.search("No such file",run["output"]):
- vtpm_cleanup(domName)
FAIL("TPM frontend support not compiled into (domU?) kernel")
consoleHistory = console.getHistory()
timeout=90)
except TimeoutError, e:
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL(str(e))
if status != 0:
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL("xm migrate did not succeed. External device migration activated?")
new_domid = domid(domName)
if (old_domid == new_domid):
- vtpm_cleanup(domName)
FAIL("xm migrate failed, domain id is still %s (loop=%d)" %
(old_domid,loop))
try:
console = domain.getConsole()
except ConsoleError, e:
- vtpm_cleanup(domName)
FAIL(str(e))
try:
run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("No result from dumping the PCRs")
if not re.search("PCR-00:",run["output"]):
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side")
loop += 1
domain.closeConsole()
domain.stop()
-
-vtpm_cleanup(domName)
import commands
import os
import os.path
+import atexit
config = {"vtpm":"instance=1,backend=0"}
domain = XmTestDomain(extraConfig=config)
except DomainError, e:
if verbose:
print e.extra
- vtpm_cleanup(domName)
FAIL("Unable to create domain (%s)" % domName)
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
try:
console.sendInput("input")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL(str(e))
try:
run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("No result from dumping the PCRs")
if re.search("No such file",run["output"]):
- vtpm_cleanup(domName)
FAIL("TPM frontend support not compiled into (domU?) kernel")
consoleHistory = console.getHistory()
timeout=90)
except TimeoutError, e:
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL(str(e))
if status != 0:
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL("xm migrate did not succeed. External device migration activated?")
new_domid = domid(domName)
if (old_domid == new_domid):
- vtpm_cleanup(domName)
FAIL("xm migrate failed, domain id is still %s (loop=%d)" %
(old_domid,loop))
try:
console = domain.getConsole()
except ConsoleError, e:
- vtpm_cleanup(domName)
FAIL(str(e))
try:
run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("No result from dumping the PCRs")
if not re.search("PCR-00:",run["output"]):
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side")
loop += 1
domain.closeConsole()
domain.stop()
-
-vtpm_cleanup(domName)
import commands
import os
import os.path
+import atexit
config = {"vtpm":"instance=1,backend=0"}
domain = XmTestDomain(extraConfig=config)
except DomainError, e:
if verbose:
print e.extra
- vtpm_cleanup(domName)
FAIL("Unable to create domain (%s)" % domName)
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
try:
console.sendInput("input")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL(str(e))
try:
run = console.runCmd("mknod /dev/tpm0 c 10 224")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Error while creating /dev/tpm0")
try:
run = console.runCmd("echo -ne \"\\x00\\xc1\\x00\\x00\\x00\\x22\\x00\\x00\\x00\\x14\\x00\\x00\\x00\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\0xf\\x10\\x11\\x12\\x13\\x14\" > seq; cat seq > /dev/tpm0")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Error while extending PCR 0")
try:
run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("No result from dumping the PCRs")
if re.search("No such file",run["output"]):
- vtpm_cleanup(domName)
FAIL("TPM frontend support not compiled into (domU?) kernel")
if not re.search("PCR-00:",run["output"]):
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side: \n%s" % run["output"])
if not re.search("PCR-00: 1E A7 BD",run["output"]):
except TimeoutError, e:
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL(str(e))
if status != 0:
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL("xm save did not succeed")
try:
except TimeoutError, e:
os.remove("%s.save" % domName)
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL(str(e))
os.remove("%s.save" % domName)
if status != 0:
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL("xm restore did not succeed")
try:
console = domain.getConsole()
except ConsoleError, e:
- vtpm_cleanup(domName)
FAIL(str(e))
try:
run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL(str(e))
if not re.search("PCR-00:",run["output"]):
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side")
if not re.search("PCR-00: 1E A7 BD",run["output"]):
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Virtual TPM lost PCR 0 value: \n%s" % run["output"])
loop += 1
domain.stop()
-vtpm_cleanup(domName)
-
import commands
import os
import os.path
+import atexit
config = {"vtpm":"instance=1,backend=0"}
domain = XmTestDomain(extraConfig=config)
except DomainError, e:
if verbose:
print e.extra
- vtpm_cleanup(domName)
FAIL("Unable to create domain (%s)" % domName)
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
try:
console.sendInput("input")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL(str(e))
try:
run = console.runCmd("mknod /dev/tpm0 c 10 224")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Error while creating /dev/tpm0")
try:
run = console.runCmd("echo -ne \"\\x00\\xc1\\x00\\x00\\x00\\x22\\x00\\x00\\x00\\x14\\x00\\x00\\x00\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\0xf\\x10\\x11\\x12\\x13\\x14\" > seq; cat seq > /dev/tpm0")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Error while extending PCR 0")
try:
run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("No result from dumping the PCRs")
if re.search("No such file",run["output"]):
- vtpm_cleanup(domName)
FAIL("TPM frontend support not compiled into (domU?) kernel")
if not re.search("PCR-00:",run["output"]):
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side: \n%s" % run["output"])
if not re.search("PCR-00: 1E A7 BD",run["output"]):
timeout=90)
except TimeoutError, e:
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL(str(e))
if status != 0:
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL("xm migrate did not succeed. External device migration activated?")
new_domid = domid(domName)
if (old_domid == new_domid):
- vtpm_cleanup(domName)
FAIL("xm migrate failed, domain id is still %s (loop=%d)" %
(old_domid,loop))
try:
console = domain.getConsole()
except ConsoleError, e:
- vtpm_cleanup(domName)
FAIL(str(e))
try:
run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("No result from dumping the PCRs")
if not re.search("PCR-00:",run["output"]):
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side")
if not re.search("PCR-00: 1E A7 BD",run["output"]):
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Virtual TPM lost PCR 0 value: \n%s" % run["output"])
loop += 1
domain.closeConsole()
domain.stop()
-
-vtpm_cleanup(domName)
import commands
import os
import os.path
+import atexit
config = {"vtpm":"instance=1,backend=0"}
domain = XmTestDomain(extraConfig=config)
except DomainError, e:
if verbose:
print e.extra
- vtpm_cleanup(domName)
FAIL("Unable to create domain (%s)" % domName)
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
try:
console.sendInput("input")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL(str(e))
try:
run = console.runCmd("mknod /dev/tpm0 c 10 224")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Error while creating /dev/tpm0")
try:
run = console.runCmd("echo -ne \"\\x00\\xc1\\x00\\x00\\x00\\x22\\x00\\x00\\x00\\x14\\x00\\x00\\x00\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\0xf\\x10\\x11\\x12\\x13\\x14\" > seq; cat seq > /dev/tpm0")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Error while extending PCR 0")
try:
run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("No result from dumping the PCRs")
if re.search("No such file",run["output"]):
- vtpm_cleanup(domName)
FAIL("TPM frontend support not compiled into (domU?) kernel")
if not re.search("PCR-00:",run["output"]):
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side: \n%s" % run["output"])
if not re.search("PCR-00: 1E A7 BD",run["output"]):
timeout=90)
except TimeoutError, e:
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL(str(e))
if status != 0:
saveLog(consoleHistory)
- vtpm_cleanup(domName)
FAIL("xm migrate did not succeed. External device migration activated?")
new_domid = domid(domName)
if (old_domid == new_domid):
- vtpm_cleanup(domName)
FAIL("xm migrate failed, domain id is still %s (loop=%d)" %
(old_domid,loop))
try:
console = domain.getConsole()
except ConsoleError, e:
- vtpm_cleanup(domName)
FAIL(str(e))
try:
run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
except ConsoleError, e:
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("No result from dumping the PCRs")
if not re.search("PCR-00:",run["output"]):
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side")
if not re.search("PCR-00: 1E A7 BD",run["output"]):
saveLog(console.getHistory())
- vtpm_cleanup(domName)
FAIL("Virtual TPM lost PCR 0 value: \n%s" % run["output"])
loop += 1
domain.closeConsole()
domain.stop()
-
-vtpm_cleanup(domName)
"need /dev/tpm0")
def vtpm_cleanup(domName):
- traceCommand("/etc/xen/scripts/vtpm-delete %s" % domName)
+ traceCommand("/etc/xen/scripts/vtpm-delete "
+ "`xenstore-read /local/domain/0/backend/vtpm/%s/0/uuid`" %
+ str(domid(domName)))
+
+def vtpm_cleanup(uuid):
+ from xen.xm import main
+ if main.serverType != main.SERVER_XEN_API:
+ traceCommand("/etc/xen/scripts/vtpm-delete %s" % uuid)
+
+def vtpm_get_uuid(domainid):
+ s, o = traceCommand("xenstore-read "
+ "/local/domain/0/backend/vtpm/%s/0/uuid" % domainid)
+ return o